#ifndef SEQSTACK_H_INCLUDED
#define SEQSTACK_H_INCLUDED

/****************************************
 *  Project： SeqStack 栈操作
 *  Function:
 *  Description: 栈操作
 *  Author: coder-itl
 ****************************************
 *  Copyright 2021/10/11 by coder-itl
 ****************************************/
#include "stdio.h"
#include "stdlib.h"

#include "Element.h"

#define MAX_SIZE 255
/**
 * 定义栈的顺序存储方式
 */
typedef struct SeqStack {
    /* 顺序栈中用来存放数据元素的数组 */
    ElementType elem[MAX_SIZE];
    /* 栈顶(数组中的下标),如果为 -1 则证明栈为空 */
    int top;
    /* 当前栈的元素个数 */
    int length;

} SeqStack;

/**
 * 初始化栈
 * @param list
 */
void InitSeqStack(SeqStack *seqStack);

/**
 * 顺序栈的入栈操作
 * @param seqStack 要操作的顺序栈
 * @param element
 * @return
 */
int PushSeqStack(SeqStack *seqStack, ElementType element);

/**
 * 顺序栈出栈操作
 * @param seqStack  要操作的顺序栈
 * @param element  操作的顺序栈元素
 * @return  以指针方式返回出栈的元素,返回值为出栈的结果 TRUE(1) | FALSE(0)
 */
int PopSeqStack(SeqStack *seqStack, ElementType *element);

/**
 * 清空栈
 * @param seqStack
 */
void ClearSeqStack(SeqStack *seqStack);

/* 栈是否为空 */
int IsEmptySeqStack(SeqStack *seqStack);

/**
 * 获取栈顶元素
 * @param seqStack
 * @param element
 */
void GetSeqStackTopElement(SeqStack *seqStack, ElementType *element);

#endif // SEQSTACK_H_INCLUDED
